package br.com.universidade.servlets.materia;

import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.universidade.bean.Aluno;
import br.com.universidade.bean.AlunoMatriculado;
import br.com.universidade.bean.Materia;
import br.com.universidade.bean.Professor;
import br.com.universidade.dao.AlunoDao;
import br.com.universidade.dao.MateriaDao;
import br.com.universidade.dao.ProfessorDao;
import br.com.universidade.servlets.GenericServlet;
import br.com.universidade.util.enun.ViewEnun;

@WebServlet("/PAGES/materia/salvarMateria")
public class SalvarMateriaServlet extends GenericServlet {
	private static final long serialVersionUID = 1L;
	private static final String LISTA_ALUNOS = "lista";
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		try {
			AlunoDao alunoDao = new AlunoDao();
			List<Aluno> listaAluno =alunoDao.findAll(Aluno.class);
			request.setAttribute("listaAluno", listaAluno);
			
			ProfessorDao professorDao = new ProfessorDao();
			List<Professor> listaProfessor = professorDao.findAll(Professor.class);
			request.setAttribute("listaProfessor", listaProfessor);
			
			request.getRequestDispatcher("/PAGES/materia/formMateria.jsp").forward(request, response);
		} catch (Exception e) {
			System.out.println("Erro ao listar os alunos");
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String[] cdAlunos = request.getParameterValues(LISTA_ALUNOS);
		Materia materia = null;
		try {
			materia = criarMateria(request);
			validarCamposObrigatorios(materia, request);
			matricularAlunos(materia,cdAlunos);
			
			MateriaDao materiaDAO  = new MateriaDao();
			materiaDAO.save(materia);
			saveSucessMessage(request);
			request.getRequestDispatcher("/PAGES/materia/listarMateria").forward(request, response);
		} catch (Exception e) {
			e.printStackTrace();
			saveErrorMessage(request);
			request.setAttribute("materia",materia);
			doGet(request, response);
		}
		
	}

	private void validarCamposObrigatorios(Materia materia,HttpServletRequest request)  throws RuntimeException{
		boolean erro = false;
		if(isFilled(materia.getNome())){
			request.setAttribute("msgNome", ViewEnun.MSG_ERROR);
			erro = true;
		}
		
		if(isFilled(materia.getDescricao())){
			request.setAttribute("msgDescricao", ViewEnun.MSG_ERROR);
			erro = true;
		}
		
		if(erro){
			throw new RuntimeException("campo obrigatorio nao preenchido");
		}
	}

	protected void matricularAlunos(Materia materia, String[] cdAlunos) {
		for (String codigoAluno : cdAlunos) {
			Aluno aluno = new Aluno();
			aluno.setId(Integer.parseInt(codigoAluno));
			materia.getAlunosMatriculados().add(aluno);
		}
	}

	protected static Materia criarMateria(HttpServletRequest request) throws Exception{
		String codigo = request.getParameter(ViewEnun.Materia.ID.getValue());
		String nome = request.getParameter(ViewEnun.Materia.NOME.getValue());
		String descricao = request.getParameter(ViewEnun.Materia.DESCRICAO.getValue());
		String professor = request.getParameter(ViewEnun.Materia.PROFESSOR.getValue());
		
		ProfessorDao dao = new ProfessorDao();
		Professor objProfessor =dao.getById(new Integer(professor), Professor.class);
		return new Materia(nome, descricao,objProfessor);
	}

}
